
                    Low Power noForth


Implementatie ideen LPnF:

1) Na .OK in diepe slaap, in ACCEPT op 1 MHz en na ACCEPT op 8 MHz
    Nodig SLEEP, WAKE, 1MHZ en 8MHZ en een RX-interrupt vector
    Stroom in slaap 0,0005mA, in ACCEPT 0,35mA de rest 2,5mA


2) Na .OK flink in slaap, baudrate generator en ACCEPT altijd op 32kHz, de rest op 1MHZ
    Nodig SLEEP, WAKE, 32KHZ en 1MHZ en een RX-interrupt vector
    Stroom in slaap 0,0005mA, RX 0,035mA de rest 0,35mA


3) Default op 1 MHz, na .OK in diepe slaap, verder niets.
    Nodig SLEEP, WAKE, 1MHZ en een RX-interrupt vector
    Stroom in slaap 0,0005mA, RX 0,020mA de rest 0,35mA


4) Default op 1/8/16 MHz, bij KEY en EMIT in lichte slaap.
    Nodig (KEY), (EMIT), WAKE-RX, WAKE-TX en twee interrupt vectoren RX en TX
    Stroom op 8MHZ in slaap bij het wachten op KEY of EMIT 0,035mA, de rest 2,5mA










Stroomverbruik MSP430 met noForth:

 - DCO freq.  -    LPM4    -      LPM2        -        LPM0         - Now in AM

    1 MHz        0,0006mA     0,022mA/0,35mA       0,070mA/0,35mA      0,35mA

    8 MHz        0,0006mA     0,025mA/2,60mA       0,345mA/2,60mA      2,60mA

   16 MHz        0,0006mA     0,033mA/5,20mA       0,682mA/5,20mA      5,20mA













Voorbeeld-1 hardware interrupt)

code INT-ON  	08 # 23 & .b bic  #8 sr bis  next  end-code
code INT-OFF    #8 sr bic  next  end-code
code SLEEP0     18 # sr bis  next  end-code \ Go from AM to LPM0
: RUNNER  	 	1  8 0 do  dup >leds  2*  50 ms  loop  drop ;

code HARDWARE-INTERRUPT
    08 # 23 & .b bic    \ Interrupt flag off
    F8 # rp ) bic		\ Interrupt off, CPU active again!
    reti
end-code

: LPM0      ( -- )
    port1-on  flash
    begin  runner  int-on  sleep0  key? until
    flash  int-off ;

' hardware-interrupt >body  FFE4 vec!   \ Set vector











Voorbeeld-2 RX-interrupt) 

code WAKE-RX    ( -- )
    #1 001 & .b bic         \ RS232 RX int. off
    F0 # rp ) bic           \ LPM off
    reti
end-code

code KEY}       ( -- c )
    tos sp -) mov           \ Push TOS
    #1 003 & .b bit         \ Test RX flag
    =? if,                  \ Not set ?
        #1 001 & .b bis     \ RX interrupt on
        18 # sr bis         \ Go from AM to LPM0
    then,
    066 &  tos .b mov       \ Get char
    next
end-code

: SLEEP-ON      ( -- )  \ Set LPM RS232 variant routines
    int-off
    F7 022 *bis         \ Only P1.3 is input
    41 021 *bic         \ Leds off
    FF 029 *bic         \ Set P2 low
    ['] key} to 'key ;  \ Replace vector

' wake-rx >body  FFEE vec!  \ RX intrpt.



